Computers have become highly integrated in the workforce, in the home, in mobile devices, and many other places. Computers can process massive amounts of information quickly and efficiently. Software applications designed to run on computer systems allow users to perform a wide variety of functions including business applications, schoolwork, entertainment and more. Software applications are often designed to perform specific tasks, such as word processor applications for drafting documents, or email programs for sending, receiving and organizing email.
In some cases, software applications are designed to work with and perform operations on large amounts of data. For instance, software applications may be designed to perform computational operations on large data arrays. These arrays may include more information than can fit in the memory of a single computer system. In such cases, the arrays are partitioned and stored on different computer systems. When operations are performed on these distributed arrays, data from a portion of the array stored on one computer system is often needed on another computer system that has a different portion of the distributed array. As such, data is frequently transferred between the different computer systems that store the different portions of the distributed arrays.
The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.